package cn.le.redis;

import cn.le.vo.RedisDeviceVO;
import cn.le.vo.RedisProductVO;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

import static cn.le.util.Constant.DEVICE;
import static cn.le.util.Constant.PROPERTY;

@Component
public class BaseRedisUtil {

    @Autowired
    protected StringRedisTemplate redisTemplate;

    public void put(String imei,RedisDeviceVO vo){
        String json = JSONObject.toJSONString(vo);
        redisTemplate.opsForHash().put(DEVICE,imei,json);
    }

    public void put(Long productId, RedisProductVO vo){
        String json = JSONArray.toJSONString(vo);
        redisTemplate.opsForHash().put(PROPERTY,String.valueOf(productId),json);
    }

    public void putAll(Map<Long,RedisProductVO> map){
        Map<String,String> cacheMap = new HashMap<>(map.size());
        map.forEach((key,val)->{
            cacheMap.put(String.valueOf(key),JSONObject.toJSONString(val));
        });
        redisTemplate.opsForHash().putAll(PROPERTY,cacheMap);
    }

    public RedisDeviceVO get(String imei){
        String json = (String) redisTemplate.opsForHash().get(DEVICE,imei);
        RedisDeviceVO vo = JSONObject.parseObject(json,RedisDeviceVO.class);
        return vo;
    }


    public RedisProductVO get(Long productId){
        String json = (String) redisTemplate.opsForHash().get(PROPERTY,String.valueOf(productId));
        RedisProductVO vo = JSONObject.parseObject(json,RedisProductVO.class);
        return vo;
    }


}
